/* Copyright 2009
 *
 * This program and the accompanying materials
 * are made available under the terms of the
 * Eclipse Public License v1.0 which accompanies
 * this distribution, and is available at
 *
 * 		http://www.eclipse.org/legal/epl-v10.html
 *
 * Unless required by applicable law or agreed to in
 * writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
 * OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * Contributors:
 * 	   IBM Corporation - initial API and implementation for JDT/DLTK
 *     Sean W. Quinn - initial adoption for use with PHP from various sources.
 */
package org.eclipse.php.internal.ui.preferences.formatter;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
 * Represents a node in the options tree.
 */
public abstract class Node {

    private final InnerNode fParent;
    private final String fName;

    public int index;

    protected final Map fWorkingValues;
    protected final ArrayList fChildren;

    public Node(InnerNode parent, Map workingValues, String message) {
        if (workingValues == null || message == null)
            throw new IllegalArgumentException();
        fParent= parent;
        fWorkingValues= workingValues;
        fName= message;
        fChildren= new ArrayList();
        if (fParent != null) {
            fParent.add(this);
        }
    }

    public abstract void setChecked(boolean checked);

    public boolean hasChildren() {
        return !fChildren.isEmpty();
    }

    public List getChildren() {
        return Collections.unmodifiableList(fChildren);
    }

    public InnerNode getParent() {
        return fParent;
    }

    @Override
	public final String toString() {
        return fName;
    }

    public abstract List getSnippets();

    public abstract void getCheckedLeafs(List list);
}
